From: Andre Przywara Date: Fri, 10 Sep 2010 17:57:47 +0000 (+0100) Subject: xl: Fix adding additional config cmdline parameters X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11512 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=a48b2967f975fcd8e1edf8a9cc9f1ef004992825;p=xen.git xl: Fix adding additional config cmdline parameters When checking the size of the buffer we hold for additional config parameters passed on the command line we should take the size of the to-be-added string into account. While at it, rework the implementation to be cleaner and safer. Signed-off-by: Andre Przywara Signed-off-by: Ian Jackson --- diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 6e2fce786d..547b2f6fa5 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -3179,21 +3179,17 @@ int main_create(int argc, char **argv) } } - memset(extra_config, 0, sizeof(extra_config)); - while (optind < argc) { - if ((p = strchr(argv[optind], '='))) { - if (strlen(extra_config) + 1 < sizeof(extra_config)) { - if (strlen(extra_config)) - strcat(extra_config, "\n"); - strcat(extra_config, argv[optind]); - } + extra_config[0] = '\0'; + for (p = extra_config; optind < argc; optind++) { + if (strchr(argv[optind], '=') != NULL) { + p += snprintf(p, sizeof(extra_config) - (p - extra_config), + "%s\n", argv[optind]); } else if (!filename) { filename = argv[optind]; } else { help("create"); return 2; } - optind++; } memset(&dom_info, 0, sizeof(dom_info));